# fun = lambda x, y: x + y
# print(fun(1, 2))


a = [1, 2, 3, 4, 5]

# map()函数
# • 原型： map(fn, lsd)
# • 参数：
# ◦ fn：是⼀个函数
# ◦ lsd：集合
# • 功能：将传输的函数fn依次作⽤到lsd集合中的每个元素，并把结果作为⼀个Iterator返回
result = map(lambda x: x ** 3, a)  # 映射
# result 是 map() 返回的迭代器，将其转换为列表打印
print(list(result))


def ff(x):
    return x ** 3


result = map(ff, a)
print(list(result))

# 累积 reduce
# 原型：reduce(fn, lsd)
# • 参数：
# ◦ fn：⼀个函数
# ◦ lsd：集合
# • 功能：传⼊的fn函数作⽤在lsd集合中，这个fn函数必须接收两个参数，reduce把结果继续和序列
# 中的下⼀个元素做累积运算
from functools import reduce  # 导入函数的快捷键：alt+enter

result = reduce(lambda x, y: x * y, a)
print(result)


def yy(s):
    return s % 2


# filter
# 原型：filter(fn, lsd)
# 参数： fn：函数 lsd：集合 功能：⽤于过滤列表，把传⼊的fn函数
# 依次作⽤在lsd集合中的每个元素上，然后根据返回True还是False决定是否保留该元素

result = filter(yy, a)
print(list(result))

# 过滤
result = filter(lambda x: x % 2, a)
print(result)
print(list(result))

print(reduce(lambda x, y: x + y, a))

a = [1, 2, 3, 4, 5]

print("----" * 20)


def aa(x, y):
    print("x的值为：%d" % x)
    print("y的值为：%d" % y)
    return x * y


print(reduce(aa, a))
